Spring WebFlux 애플리케이션 서버에서 요청이 처리되는 과정

Spring WebFlux는 JVM 위에서 확장 가능한 웹 애플리케이션을 만들기 위한 논블로킹, 리액티브 웹 스택입니다. 전체적인 흐름은 전통적인 Spring MVC와 유사한 부분도 있지만, 완전 비동기 이벤트 기반 아키텍처를 사용하기 때문에 기반 엔진, 요청 처리 및 동시성 모델이 근본적으로 다릅니다.

아래는 Spring WebFlux 애플리케이션 서버 내에서 HTTP 요청이 처리되는 단계별 과정입니다.

1. 요청 진입: Netty 또는 서블릿 컨테이너 (Reactor Netty, Tomcat 등)

2. 필터 체인 (WebFilter)

3. 프론트 컨트롤러: DispatcherHandler

4. 라우터 함수 또는 핸들러 매핑

5. 핸들러 어댑터와 인자 해석

6. 핸들러(컨트롤러 또는 함수) 실행

7. 예외 처리

8. 응답 준비

9. WebFilter (후처리)

10. 응답 전송

요약 표: Spring WebFlux 내부 요청 처리 과정

단계 주요 컴포넌트 주요 내용/특징
요청 진입 Netty/Undertow/Servlet 어댑터 논블로킹, 리액티브 래퍼
사전 처리 WebFilter 인증, CORS, 로깅 등
라우팅 DispatcherHandler + HandlerMapping URL·메서드에 맞는 핸들러 매핑
핸들러 실행 컨트롤러/함수 Mono/Flux 반환, 비동기 로직
예외 처리 WebExceptionHandler 리액티브 스트림 에러 처리
응답 직렬화 메시지 작성기, 템플릿 엔진 논블로킹 응답 생성
후처리 WebFilter 응답 후 아웃바운드 필터링
응답 송출 Netty/Servlet 비동기 전송 클라이언트에 비동기 데이터 스트림

Spring MVC와의 주요 차이점

요약하자면:
Spring WebFlux 서버는 각 요청을 비동기 신호 흐름으로 처리하며, I/O에 스레드를 블로킹하지 않고 대규모 확장성과 유연성을 제공합니다.